Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Compare two Generic Lists<customType> and return the differnce.

Îåêßíçóå áðü ôï ìÝëïò Τάσκος Γιώργος. Τελευταία δημοσίευση από το μέλος Τάσκος Γιώργος στις 10-06-2009, 14:05. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  10-06-2009, 02:57 51492

    Compare two Generic Lists<customType> and return the differnce.

    Καλησπέρα σε όλη την κοινωνία.

    Έχω ένα προβληματάκι που δεν μπορώ να βγάλω.
    Έχω δύο Generic Lists<> (ListA, ListB), και θα ήθελα να συγκρίνω την ListA με την ListB,
    και όσα objects από την ListB, δεν υπάρχουν στην ListA, είτε να γίνουν μία
    ListC, είτε να προστεθούν κατευθείαν στην ListA!

    foreach (MyClass obj in ListB)
    {
       if (!ListA.Contains(obj))
               ListA.Add(obj);
    }

    Είμαι κομμάτια και έχω γκαβωθεί?

  •  10-06-2009, 12:07 51495 σε απάντηση της 51492

    Απ: Compare two Generic Lists<customType> and return the differnce.

    gtas:

    και όσα objects από την ListB, δεν υπάρχουν στην ListA, είτε να γίνουν μία
    ListC, είτε να προστεθούν κατευθείαν στην ListA!

    Τα αντικείμενα της λίστα Α που είναι ίδια με της λίστας Β είναι ίδια κατά τιμή μόνο των μελών τους ή κατά αναφορά;Πρόκειται δηλαδή για αντικείμενα που απλά έχουν ίδια τιμή οι μεταβλητές τους ή που είναι τα ίδια αντικείμενα;Η List<T>.Contains καλεί τον EqualityComparer<T>.Default για σύγκριση των αντικειμένων,ο οποίος ελέγχει αν η κλάση σου υλοποιεί το IEquatable<T> interface και το χρησιμοποιεί,διαφορετικά χρησιμοποιεί την Object.Equals η οποία κοιτάει για reference equality μόνο.Αν λοιπόν συγκρίνεις διαφορετικά αντικείμενα η κομψή λύση είναι να κάνεις implement το IEquatable<T> (ή να κάνεις override την Object.Equals αν δεν σου αρέσουν οι κομψές λύσεις) και να θέσεις εκεί το πώς θα γίνεται η σύγκριση των αντικειμένων.Αν από την άλλη πρόκειται για τα ίδια αντικείμενα by reference...back to the drawing board!

  •  10-06-2009, 14:05 51503 σε απάντηση της 51492

    Απ: Compare two Generic Lists<customType> and return the differnce.

    Κομψότατη λύση και ακριβείς.

    Ευχαριστώ φίλε μου.

    Είχα την εντύπωση για κάποιο λόγο ότι κάνει Compare σε object επίπεδο βάση των Properties,
    και όχι σε Reference. Και είναι από τις βασικές αρχές. Κολλάει το μυαλό μερικές φορές. :P

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems